package cn.honqun.tinycms.repository;

import cn.honqun.tinycms.common.dto.Page;
import cn.honqun.tinycms.domain.entity.Role;
import cn.honqun.tinycms.domain.entity.User;
import cn.honqun.tinycms.domain.vo.ChangePwdVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import java.util.List;

public interface UserMapper extends BaseMapper<User> {
    /**
     * 创建用户
     */
    int create(User user);

    /**
     * 更新用户，不会更新username, password
     */
    int update(User user);

    /**
     * 根据用户名、真实姓名、角色查询
     */
    Page<User> select(Page<User> page, User user);

    /**
     * 启用账号
     */
    int enabled(User user);

    /**
     * 禁用账号
     */
    int disabled(User user);

    /**
     * 修改密码
     */
    User changePassword(ChangePwdVO changePwdVO);

    /**
     * 根据ID查询
     */
    User selectById(Long id);

    /**
     * 根据用户名查询，只查询id，username, phone_num等关键信息
     */
    User selectByUsername(String username);

    /**
     * 根据用手机号查询，只查询id，username, phone_num等关键信息
     */
    User selectByPhoneNum(String phoneNum);

    /**
     * 查询用户，同时获取角色信息
     *
     * @param id 用户ID
     * @return User对象
     */
    User selectUserWithRoles(Long id);

    /**
     * 密码加密
     *
     * @param password 密码
     * @param salt     盐
     * @return 加密后的密码
     */
    String encodePassword(String password, String salt);

    /**
     * 根据ID，查询密码
     */
    String selectPassword(Long id);

    /**
     * 清空用户的所有角色
     */
    int clearRoles(User user);

    /**
     * 为用户分配一个角色
     */
    int grantRole(User user, Role role);

    /**
     * 选择用户的角色
     */
    List<Role> selectRoles(User user);

    /**
     * 判断用户名是否存在
     */
    boolean isUsernameExists(User user);

    /**
     * 判断手机号是否存在
     */
    boolean isPhoneNumExists(User user);
}
